package gestion.camping.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class DateFormatUtils  {

	public static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

	/**
	 * Convertit une chaine au format "JJ/MM/AAAA" en objet java.util.Date.
	 * 
	 * @param jjmmaaaa
	 *            Chaine à convertir
	 * 
	 * @return Objet Date, ou référence null si le format est incorrect
	 */
	public static synchronized Date parseDate(String jjmmaaaa) {
		Date resultat = null;
		
		if(jjmmaaaa != null && !jjmmaaaa.isEmpty()){
			try {
				// Evite de prendre en compte comme date des valeurs tel que : 99/99/9999
				sdf.setLenient(false);
				resultat = sdf.parse(jjmmaaaa);
			} catch (ParseException e) {
				System.err.println("parseDate: format de date incorrect"+ e.getMessage());
			}
		}

		return resultat;
	}

	/**
	 * Convertit un objet java.util.Date. en une chaine au format "JJ/MM/AAAA"
	 *  
	 * @param date Instance de Date à convertir
	 * 
	 * @return
	 */
	public static synchronized String formatDate(Date date) {
		if (date == null){
			return null;
		}
		return sdf.format(date);
	}
	
	public static double getDaysBetweenDates(Date theEarlierDate, Date theLaterDate) {
		double result = Double.POSITIVE_INFINITY;
		if (theEarlierDate != null && theLaterDate != null) {
			final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24;
			Calendar aCal = Calendar.getInstance();
			aCal.setTime(theEarlierDate);
			long aFromOffset = aCal.get(Calendar.DST_OFFSET);
			aCal.setTime(theLaterDate);
			long aToOffset = aCal.get(Calendar.DST_OFFSET);
			long aDayDiffInMili = (theLaterDate.getTime() + aToOffset) - (theEarlierDate.getTime() + aFromOffset);
			result = ((double) aDayDiffInMili / MILLISECONDS_PER_DAY);
		}
		return result;
	}
}
